package v1

import (
	fm "gf-xb-api/cwt/filter/model"
	"gf-xb-api/internal/model/dto"
	"gf-xb-api/internal/model/vo"

	"github.com/gogf/gf/v2/frame/g"
)

// CreateReq 新建用户参数结构体
type CreateReq struct {
	g.Meta   `path:"/v1/user/create" tags:"Users" method:"post" summary:"新建用户"`
	Username string  `json:"username" v:"username @required|regex:^[a-zA-Z]([a-zA-Z0-9]{5,17})+$#请输入账号|账号格式不正确(英文字母开头6-18位)" dc:"账号"`
	Password string  `json:"password" v:"password @required#请输入密码" dc:"密码"`
	Mobile   string  `json:"mobile" v:"mobile @required|regex:^1([0-9]{10})+$#请输入手机号|手机号格式不正确(1开头11位数字)"  dc:"手机号"`
	Email    *string `json:"email" v:"email#电子邮箱不正确" dc:"电子邮箱"`
	Nickname *string `json:"nickname" v:"length:2,30#昵称长度非法" dc:"昵称"`
}

// CreateRes 新建用户返回消息结构体
type CreateRes bool

// GetOneReq 获得用户详情参数结构体
type GetOneReq struct {
	g.Meta `path:"/v1/user/info" tags:"Users" method:"get" summary:"用户详情" in:"query"`
	Id     uint `json:"id" v:"required#用户Id不能为空" dc:"用户Id"`
}

// GetOneRes 获得用户详情返回消息结构体
type GetOneRes struct {
	Id         uint    `json:"id" dc:"用户Id"`
	Mobile     string  `json:"mobile" dc:"手机号"`
	Email      *string `json:"email" dc:"电子邮箱"`
	Nickname   *string `json:"nickname" dc:"昵称"`
	Status     uint    `json:"status" dc:"状态"`
	StatusName string  `json:"statusName" dc:"状态名称"`
	Timestamp  int64   `json:"timestamp" dc:"时间戳"`
}

// GetListReq 获得用户列表参数结构体
type GetListReq struct {
	g.Meta                            `path:"/v1/user/list" tags:"Users" method:"post" summary:"用户列表"`
	fm.PageRequest[dto.UserListInput] `json:"pageRequest" dc:"筛选条件"`
}

// GetListRes 获得用户列表返回消息结构体
type GetListRes fm.PageData[*vo.UserList]

// UpdateReq 更新用户参数结构体
type UpdateReq struct {
	g.Meta    `path:"/v1/user/update" tags:"Users" method:"post" summary:"更新用户"`
	Id        uint    `json:"id" v:"required#用户Id不能为空" dc:"用户Id"`
	Mobile    string  `json:"mobile" v:"required#手机号不能为空" dc:"手机号"`
	Email     *string `json:"email" v:"email#电子邮箱不正确" dc:"电子邮箱"`
	Nickname  *string `json:"nickname" v:"length:2,30#昵称长度非法" dc:"昵称"`
	Timestamp int64   `json:"timestamp" v:"required#时间戳不能为空" dc:"时间戳"`
}

// UpdateRes 更新用户返回消息结构体
type UpdateRes bool

// GetUserLoginInfoReq 获得用户登录详情参数结构体
type GetUserLoginInfoReq struct {
	g.Meta   `path:"/v1/user/getUserInfo" tags:"Users" method:"post" summary:"获得用户详情"`
	Username string `json:"username" dc:"账号"`
	Password string `json:"password" dc:"密码"`
}

// GetUserLoginInfoRes 获得用户登录详情返回消息结构体
type GetUserLoginInfoRes struct {
	Id   uint   `json:"id" dc:"用户Id"`
	Uuid string `json:"uuid" dc:"用户uuid"`
}

// LogoutReq 登出参数结构体
type LogoutReq struct {
	g.Meta `path:"/v1/user/logout" tags:"Users" method:"post" summary:"当前用户登出"`
}

// LogoutRes 登出返回消息结构体
type LogoutRes bool

// ResetPasswordReq 重置密码 参数结构体
type ResetPasswordReq struct {
	g.Meta         `path:"/v1/user/resetpassword" tags:"Users" method:"post" summary:"重置密码"`
	Username       string `json:"username" v:"required#账号不能为空" dc:"账号"`
	OldPassword    string `json:"oldPassword" v:"required#当前密码不能为空" dc:"当前密码"`
	NewPassword    string `json:"newPassword" v:"required#新密码不能为空" dc:"新密码"`
	RepeatPassword string `json:"repeatPassword" v:"required#重复密码不能为空" dc:"重复密码"`
}

// ResetPasswordRes 重置密码 返回消息结构体
type ResetPasswordRes bool

// EnableReq 启用用户 参数结构体
type EnableReq struct {
	g.Meta   `path:"/v1/user/enable" tags:"Users" method:"post" summary:"启用用户" x-anonymous:"true"`
	Username string `json:"username" v:"required#账号不能为空" dc:"账号"`
}

// EnableRes 启用用户 返回消息结构体
type EnableRes bool

// DisableReq 禁用用户 参数结构体
type DisableReq struct {
	g.Meta   `path:"/v1/user/disable" tags:"Users" method:"post" summary:"禁用用户"`
	Username string `json:"username" v:"required#账号不能为空" dc:"账号"`
}

// DisableRes 禁用用户 返回消息结构体
type DisableRes bool
